Multi-Viewport Transformation Module for use in 3D Rendering System

ABSTRACT

A transaction processing circuit in a graphics rendering system receives information identifying a particular vertex of a plurality of vertices in a strip, each of which is associated with a viewport, and selects a plurality of viewports for viewport transformation of the particular vertex by selecting relevant vertices from the vertices in the strip based on a provoking vertex, and selecting the plurality of viewports to comprise the viewport associated with that relevant vertex. Viewport transformation instructions are sent to a viewport transformation module to perform a viewport transformation on untransformed coordinate data for the particular vertex for each of the viewports, wherein the one or more viewport transformation instructions comprises a viewport transformation instruction for each of the plurality of viewports, each viewport transformation instruction comprises information identifying the particular vertex and information identifying one of the plurality of viewports.

CROSS-REFERENCE TO RELATED APPLICATIONS AND CLAIM OF PRIORITY

This application is a continuation under 35 U.S.C. 120 of copendingapplication Ser. No. 17/189,398 filed Mar. 2, 2021, now U.S. Pat. No.11,721,068, which is a continuation of prior application Ser. No.16/871,226 filed May 11, 2020, now U.S. Pat. No. 10,937,234, which is acontinuation of prior application Ser. No. 16/025,059 filed Jul. 2,2018, now U.S. Pat. No. 10,685,483, which claims foreign priority under35 U.S.C. 119 from United Kingdom Application No. 1710510.7 filed Jun.30, 2017, the contents of which are incorporated by reference herein intheir entirety.

BACKGROUND OF THE INVENTION

A three-dimensional (3D) graphics system (which also may be referred toherein as a rendering system) is designed to render an image of a 3Dscene on a two-dimensional (2D) screen. Specifically, an application(e.g. a video game) generates a 3D model of the scene and outputsgeometry data representing the objects in the scene. In particular, theapplication divides each object into a plurality of primitives (i.e.simple geometric shapes, such as triangles, lines and points) which aredefined by the positions of one or more vertices. The geometry dataoutput by the application includes information identifying each vertex(e.g. the coordinates of the vertex) and information indicating theprimitives formed by the vertices. The graphics system then converts thereceived geometry data into an image displayed on the screen.

A 3D graphics system typically has two main stages—a geometry processingstage and a rasterization stage. During the geometry processing stagethe vertices received from the application are transformed from a worldwindow 102 (i.e. world space coordinates) to a viewport 104 (i.e. screenspace coordinates) as shown in FIG. 1A, which is referred to herein as aviewport transformation. The world window 102 is the area of the scene106 in application-specific coordinates (e.g. kilometres, orcentimetres) that the user wants to visualize. In contrast, the viewport104 is an area of the screen 108 in rendering-device specificcoordinates (e.g. pixels or sampling positions) used to display theimage of the scene. The viewport 104 may be the whole screen 108 or aportion thereof. Accordingly, the viewport transformation translates theincoming world space coordinates in the world window 102 to screen spacecoordinates in the viewport 104.

In many cases (e.g. as shown in FIG. 1A), the geometry processing stageuses a single viewport (typically with dimensions that cover the entirescreen) at a time and the coordinates of all vertices are transformed tothis viewport. However, some applications (such as, but not limited to,geometry shaders) may use multiple viewports to achieve one or morevisual effects. For example, in some cases it may be desirable to renderto a smaller window within the screen and/or to multiple windows withinthe screen. In other examples, some applications may implement layeredrendering wherein specific primitives may be sent to different layers(each associated with a different viewport) of a layered framebuffer to,for example, implement cube-based shadow mapping. For example, as shownin FIG. 1B there may be two viewports 110 and 112 in the screen 108 anda first and second primitive 114 and 116 are rendered in the firstviewport 110 and a third primitive 118 is rendered in the secondviewport 112 In these cases, the geometry data output by the applicationmay include information indicating the viewport associated with eachprimitive which allows the coordinates of vertices of differentprimitives to be mapped to different viewports. The geometry processingstage also typically includes forming primitives from the receivedvertices, prior to, or after, the viewport transformations thereof.

During the rasterization stage the primitives are mapped to pixels andthe colour of each pixel is determined. This may comprise identifyingwhich primitive(s) are visible at each pixel. The colour of each pixelmay then be determined by the texture of the visible primitive(s) atthat pixel and/or the pixel shader program run on that pixel. A pixelshader program describes operations that are to be performed for givenpixels. Once a colour value has been identified for each pixel thecolour values are written out to a frame buffer in memory and thendisplayed on the screen.

The embodiments described below are provided by way of example only andare not limiting of implementations which solve any or all of thedisadvantages of known viewport transformation systems.

SUMMARY OF THE INVENTION

This summary is provided to introduce a selection of concepts that arefurther described below in the detailed description. This summary is notintended to identify key features or essential features of the claimedsubject matter, nor is it intended to be used to limit the scope of theclaimed subject matter.

Described herein are viewport transformation modules and methods for usein a three-dimensional rendering system that supports the use ofmultiple viewports. The viewport transformation modules include a fetchmodule configured to read from a vertex buffer: untransformed coordinatedata for a vertex in a strip; information identifying a viewportassociated with the vertex; and information identifying a viewportassociated with one or more other vertices in the strip. The one or moreother vertices in the strip are selected based on a provoking vertex ofa primitive to be formed by the vertices in the strip and the number ofvertices in the primitive. The viewport transformation modules alsoinclude a processing module that performs a viewport transformation onthe untransformed coordinate data based on each of the identifiedviewports to generate transformed coordinate data for each identifiedviewport; and a write module that writes the transformed coordinate datafor each identified viewport to the vertex buffer.

A first aspect provides a viewport transformation module for use in athree-dimensional rendering system, the viewport transformation modulecomprising: a fetch module configured to read from a vertex buffer:untransformed coordinate data for a vertex in a strip; informationidentifying a viewport associated with the vertex; and informationidentifying a viewport associated with at least one other vertex in thestrip, the at least one other vertex selected based on a provokingvertex of a primitive to be formed by the vertices in the strip and anumber of vertices in the primitive; a processing module configured toperform a viewport transformation on the untransformed coordinate databased on each of the identified viewports to generate transformedcoordinate data for each identified viewport; and a write moduleconfigured to write the transformed coordinate data for each identifiedviewport to the vertex buffer.

A second aspect provides a method of performing multi-viewporttransformations on a vertex in a vertex strip, the method comprising:fetching, at a viewport transformation module, untransformed coordinatedata for the vertex from a vertex buffer; fetching, at the viewporttransformation module, information identifying a viewport associatedwith the vertex; fetching, at the viewport transformation module,information identifying a viewport associated with at least one othervertex in the strip, the at least one other vertex selected based on aprovoking vertex of a primitive to be formed by the vertices in thestrip and a number of vertices in the primitive; performing, at theviewport transformation module, a viewport transformation on theuntransformed coordinate data based on each of the identified viewportsto generate transformed coordinate data for each identified viewport;and write the transformed coordinate data for each identified viewportto the vertex buffer.

A third aspect provides a viewport transformation module for use in athree-dimensional rendering system, the viewport transformation modulecomprising: a processing module configured to perform a viewporttransformation on untransformed coordinate data for a vertex in a stripfor each of a plurality of viewports to generate transformed coordinatedata for each of the plurality of viewports, the plurality of viewportscomprising a viewport associated with the vertex and a viewportassociated with at least one other vertex in the strip, the at least oneother vertex based on a provoking vertex of a primitive to be formed bythe vertices in the strip and a number of vertices in the primitive;and; a write module configured to write the transformed coordinate datato a vertex buffer so that the transformed coordinate data is stored inthe vertex buffer in an order that corresponds to an order of thevertices in the strip associated with the plurality of viewports.

A fourth aspect provides a method of performing multi-viewporttransformations on vertices in a strip comprising: performing a viewporttransformation on untransformed coordinate data for a vertex in a stripfor each of a plurality of viewports to generate transformed coordinatedata for each of the plurality of viewports, the plurality of viewportscomprising a viewport associated with the vertex and a viewportassociated with at least one other vertex in the strip, the at least oneother vertex based on a provoking vertex of a primitive to be formed bythe vertices in the strip and a number of vertices in the primitive; andwriting the transformed coordinate data to a vertex buffer so that thetransformed coordinate data is stored in the vertex buffer in an orderthat corresponds to an order of the vertices in the strip associatedwith the plurality of viewports.

The viewport transformation module may be embodied in hardware on anintegrated circuit. There may be provided a method of manufacturing, atan integrated circuit manufacturing system, the viewport transformationmodule. There may be provided an integrated circuit definition datasetthat, when processed in an integrated circuit manufacturing system,configures the system to manufacture the viewport transformation module.There may be provided a non-transitory computer readable storage mediumhaving stored thereon a computer readable description of the viewporttransformation module that, when processed in an integrated circuitmanufacturing system, causes the integrated circuit manufacturing systemto manufacture an integrated circuit embodying the viewporttransformation module.

There may be provided an integrated circuit manufacturing systemcomprising: a non-transitory computer readable storage medium havingstored thereon a computer readable description of the viewporttransformation module; a layout processing system configured to processthe computer readable description so as to generate a circuit layoutdescription of an integrated circuit embodying the viewporttransformation module; and an integrated circuit generation systemconfigured to manufacture the viewport transformation module accordingto the circuit layout description.

There may be provided computer program code for performing a method asdescribed herein. There may be provided non-transitory computer readablestorage medium having stored thereon computer readable instructionsthat, when executed at a computer system, cause the computer system toperform the methods as described herein.

BRIEF DESCRIPTION OF THE DRAWINGS

The present invention is described by way of example with reference tothe accompanying drawings. In the drawings:

FIG. 1A is a schematic diagram of a window and a viewport;

FIG. 1B is a schematic diagram of multiple viewports;

FIG. 2 is a block diagram of an example 3D rendering system comprising aprimitive processing module;

FIG. 3 is a schematic diagram of a first example triangle strip;

FIG. 4 is a block diagram of an example primitive processing module ofFIG. 2 ;

FIG. 5 is a schematic diagram of a second example triangle strip withdifferent provoking vertices;

FIG. 6 is a flow diagram of an example method for performing a pluralityof viewport transformations on untransformed coordinate data for avertex in a strip;

FIG. 7 is a flow diagram of an example method for selecting the othervertices from which the viewport information is obtained;

FIG. 8 is a block diagram of an example viewport transformation module;

FIG. 9 is a schematic diagram of an example structure of the vertexbuffer;

FIG. 10 is a schematic diagram of an example vertex block of the vertexbuffer of FIG. 9 used to store transformed coordinate data for aplurality of vertices at a time;

FIG. 11 is a schematic diagram of the example vertex block of the vertexbuffer of FIG. 9 used to stored transformed coordinate data for a singlevertex at a time;

FIG. 12 is a schematic diagram illustrating an example of storingtransformed coordinate data in viewport vertex order;

FIG. 13 is a flow diagram of an example method for writing transformedcoordinate data to a data store;

FIG. 14 is a block diagram of an example computer system in which theviewport transformation module described herein is implemented; and

FIG. 15 is a block diagram of an example integrated circuitmanufacturing system for generating an integrated circuit embodying asystem to implement the viewport transformation module described herein.

DETAILED DESCRIPTION OF THE INVENTION

The following description is presented by way of example to enable aperson skilled in the art to make and use the invention. The presentinvention is not limited to the embodiments described herein and variousmodifications to the disclosed embodiments will be apparent to thoseskilled in the art. Embodiments are described by way of example only.

Described herein are methods, systems, and viewport transformationmodules for predictively performing a plurality of viewporttransformations on the untransformed coordinate data for vertices in astrip in an efficient manner. The methods include fetching, from avertex buffer: untransformed coordinate data for a vertex in a strip;information identifying the viewport associated with the vertex; andinformation identifying the viewport associated with at least one othervertex in the strip. The at least one other vertex in the strip isselected based on the provoking vertex for the primitive to be formedfrom the vertices in the strip and the number of vertices in theprimitive. A transformation is then performed on the untransformedcoordinate data for each identified viewport to generate transformedcoordinate data for each identified viewport. The transformed coordinatedata is then written to the vertex buffer.

As is described in more detail below, the vertex transformation that isperformed on a vertex is based on the primitive that the vertex formspart of. Specifically, each primitive is associated with a viewport towhich the vertices that form that primitive are transformed to. Sincethe vertices of a strip may each form part of a plurality of primitivesa plurality of different viewport transformations may need to beperformed for each vertex. Specifically, if the viewports associatedwith the different primitives that a vertex forms part of are differentthen multiple viewport transformations will have to be performed on thatvertex. However, the viewports associated with the different primitivesmay be the same and thus only one transform may have to be performed.Accordingly, a 3D rendering system could be configured to assemble theprimitives, determine the viewport associated with the primitives andthen perform the least number of transformations for each vertex.However, this requires that the primitives be formed prior to theviewport transformations. The methods, systems and viewporttransformation modules described herein provide an efficient way togenerate transformed vertex data for vertices in a strip when theprimitives are formed after viewport transformation by predicting theprimitives each vertex will form part of, and performing atransformation for each primitive the vertex is predicted to form partof (regardless of whether the viewport transformations are the same fordifferent primitives). In other words, the methods, systems and viewporttransformation modules described herein assume the viewport for eachprimitive the vertex is predicted to form part of is different.

Reference is first made to FIG. 2 which illustrates an example 3Drendering system 200 in which the viewport transformation modulesdescribed herein may be implemented. The 3D rendering system is designedto render an image of a 3D scene. It will be appreciated that FIG. 2only shows some elements of a 3D rendering system and that there may bemany other elements within the 3D rendering system that are not shown inFIG. 2 . The 3D rendering system 200 comprises a geometry processingblock 202 and a rasterization block 204.

The geometry processing block 202 receives geometry data from anapplication 206 and outputs a set of screen primitives (e.g. simplegeometric shapes, such as triangles on the screen 208). The geometrydata comprises information identifying a plurality of vertices (e.g. thecoordinates of each vertex in world space coordinates), informationidentifying the primitives formed by the vertices, and information (e.g.a viewport ID) identifying a viewport associated with each primitive.The geometry processing block 202 comprises a primitive processing (PP)block 210 that is configured to transform, using a viewporttransformation module (VTM) 212, the received vertices from a worldwindow (i.e. world space coordinates) to a viewport (i.e. screen spacecoordinates) which is referred to herein as a viewport transformation.The world window is the area the user wants to visualize inapplication-specific coordinates (e.g. kilometres, or centimetres). Incontrast, the viewport is an area of the screen in rendering-devicespecific coordinates (e.g. pixels) used to display the image of thescene. The viewport may encompass the whole screen or a portion thereof.

Viewport transformations are typically performed on a per primitivebasis (i.e. all the vertices that form a particular primitive areviewport transformed in the same manner (e.g. transformed to the sameviewport)). Many viewport transformation modules in known PP blocks areconfigured to support a single viewport and perform a single viewporttransformation on each primitive (and thus each vertex that forms theprimitive) based on that viewport. However, the viewport transformationmodules described herein support multiple viewports to implement certainvisual effects, such as, reflections. Accordingly, in the viewporttransformation modules described herein different viewports may beassigned or allocated to different primitives and thus multiple viewporttransformations based on different viewports may be performed onvertices of different primitives. The number of different viewports thatare supported is device specific. In some cases, 16 different viewportsare supported, but it will be evident to a person of skill in the artthat this is an example only. Where a vertex can form part of multipleprimitives this may result in multiple viewport transformations beingperformed on the same vertex. This is particularly likely to occur ifthe vertices are transmitted by the application 206 to the geometryprocessing block 202 as a strip.

A strip of primitives is a series of primitives sharing vertices. Forexample, FIG. 3 shows an example triangle strip 300 comprising a seriesof primitives (triangles) 302 sharing vertices 304. Strips of primitivesare typically used to reduce the amount of data used to define a set ofprimitives instead of sending vertex data for each primitive separately.For example, a triangle strip reduces the number of vertices to transmitfrom 3X to X+2 where X is the number of triangles to be drawn.

The viewport target, and thus the viewport transformation to beperformed, for a vertex is defined by the primitive(s) to which itbelongs. Since the vertices of a strip can form part of multipleprimitives a single vertex may have multiple different viewport targets.For example, in FIG. 3 vertex 2 (V-2) forms part of primitive A (P-A),primitive B (P-B) and primitive C (P-C) thus vertex 2 (V-2) may havethree different viewport targets.

Accordingly, the viewport transformation modules 212 described hereinare configured to perform N viewport transformations on the receivedvertices for each vertex in a strip in an efficient manner where N isthe number of vertices in a primitive.

Returning to FIG. 2 , the PP block 210 is also configured to form screenspace primitives (i.e. primitives defined by vertices in screen spacecoordinates) from the transformed coordinate data which are forwarded tothe rasterization block 204 for processing. An example primitiveprocessing block will be described below with reference to FIG. 4 .

The rasterization block 204 is configured to receive the screen spaceprimitives generated by the geometry processing block 202 and todetermine which primitive(s) is/are visible at each pixel andsubsequently determine the colour of each pixel. Since more than oneprimitive can overlap the same pixel a depth comparison (e.g.z-buffering or depth buffering) is performed for each pixel to determinewhich primitive is visible. For example, a z-buffer (which also may bereferred to as a depth buffer) may be used to store the distance of eachpixel to the nearest primitive in the scene. Then if a subsequentprimitive of the scene overlaps the same pixel the depth of the newprimitive is compared to the stored depth and if the new primitive has adepth indicating it is closer to the pixel then the z-buffer is updatedwith the new depth value.

Once depth values for a set of geometry have been compared with thedepth values in the z-buffer, a colour value associated with the closestprimitive is identified for each pixel. The colour of each pixel may bedetermined by the texture that covers that pixel and/or the pixel shaderprogram run on that pixel. A pixel shader program describes theoperations to be applied to pixels. Once a colour value has beenidentified for each pixel the colour values are written out to a framebuffer in memory and then displayed on the screen 208.

Reference is now made to FIG. 4 which illustrates an exampleimplementation of a primitive processing block 210 in which the viewporttransformation modules described herein may be implemented. As describedabove, the primitive processing (PP) block 210 is configured to performviewport transformations on the vertices generated by the application206 to convert the vertices from world window (i.e. world spacecoordinates) to a viewport (i.e. screen space coordinates); and, formscreen primitives from the transformed vertices. The PP block 210 ofFIG. 4 comprises a transaction processing module 402, a viewporttransformation module 212, and a primitive build module 404. In somecases, the PP block 210 may also comprise a cull module 406.

The vertex data received from the application 206 is stored in a vertexbuffer 408. The vertex data typically comprises, for each vertex, vertexcoordinates (e.g. X, Y, Z and W) in world coordinates (which is referredto as the untransformed coordinate data) and other vertex information(such as, but not limited to, information (e.g. viewport ID) indicatingthe viewport the vertex is associated with). The vertex data is storedin the vertex buffer 408 in vertex tasks which groups multiple verticestogether. In some examples, a vertex task may comprise all vertices in astrip (e.g. a triangle strip). Each task and each vertex within a taskare individually addressable in the vertex buffer 408. An examplestructure of the vertex buffer 408 will be described below in referenceto FIGS. 9 to 11 .

The vertex buffer 408 sends vertex task instructions to the transactionprocessing module 402 to cause the PP block 210 to process the verticesassociated with a particular task, and keeps track of which tasks havebeen completed (e.g. processed by the PP block 210). A vertex taskinstruction may specify, for example, the base address in the vertexbuffer 408 of the task to be processed, the number of vertices in thetask, and a task ID (e.g. a task number).

The transaction processing module 402 is configured, in response toreceiving a vertex task instruction, to translate the vertex taskinstruction into a set of viewport transformation instructions which aresent to the viewport transformation module 212, and a primitiveinstruction which is sent to the primitive build module 404. Theviewport transformation instructions cause the viewport transformationmodule 212 to perform a plurality of viewport transformations onvertices in the task.

Multiple viewport transformations are performed on the vertices in thetask because when the application 206 is configured to output verticesas a strip, each vertex may form part of multiple primitives (e.g.triangles). For example, FIG. 5 illustrates a triangle strip 500 withseven vertices (V-0 to V-6) 502 and five primitives (P-A to P-E) 504formed thereby. Three of the vertices 502 in the strip 500 (V-2, V-3,and V-4) form part of three primitives 504 (e.g. triangles).Specifically, vertex 2 (V-2) forms part of primitives A, B and C; vertex3 (V-3) forms part of primitives B, C and D; and vertex 4 (V-4) formspart of primitives C, D and E. Since viewport transformations areperformed on a per primitive basis—i.e. all vertices that form aprimitive are transformed to the same viewport—a vertex that forms partof three different primitives may have to be viewport transformed tothree different viewports, one for each primitive.

The viewport transformations performed on the vertices in the task canbe determined from the provoking vertex of the primitives. Specifically,in systems where the application 206 is configured to assign each vertexits own viewport (which may be identified by a viewport ID) one of thevertices of the primitive will be the definitive, or master, vertex ofthe viewport transformation, which will be referred to herein as theprovoking vertex. It is the viewport associated with the provokingvertex of a primitive that controls the viewport transformation of thatprimitive.

For example, where the primitives are triangles each primitive is formedby three vertices—a leading vertex (which may be referred to as vertex 0of the primitive), a middle vertex (which may be referred to as vertex 1of the primitive), and a trailing vertex (which may be referred to asvertex 2 of the primitive). For example, for primitive C (P-C) of FIG. 5, vertex 2 (V-2) is the leading vertex, vertex 3 (V-3) is the middlevertex, and vertex 4 (V-4) is the trailing vertex. One of the leadingvertex, the middle vertex, and the trailing vertex of the primitive willbe the provoking vertex.

Where the leading vertex is the provoking vertex (i.e. the provokingvertex is 0) then the first vertex of the primitive will dictate theviewport transformation for that primitive. For example, as shown intable 506 when the provoking vertex is the leading vertex (i.e. theprovoking vertex is 0) then the provoking vertex for primitives A, B, C,D and E will be vertices 0, 1, 2, 3, and 4 respectively. Where themiddle vertex is the provoking vertex (i.e. the provoking vertex isvertex 1 of the primitive) then the second vertex of the primitive willdictate the viewport transformation for that primitive. For example, asshown in table 508 when the provoking vertex is the middle vertex (i.e.the provoking vertex is 1) then the provoking vertex for primitives A,B, C, D and E will be vertices 1, 2, 3, 4, and 5 respectively. Finally,where the trailing vertex is the provoking vertex (i.e. the provokingvertex is vertex 2 of the primitive) then the third vertex of theprimitive will dictate the viewport transformation for that primitive.For example, as shown in table 510 when the provoking vertex is thetrailing vertex (i.e. the provoking vertex is 2) then the provokingvertex for primitives A, B, C, D and E will be vertices 2, 3, 4 and 5respectively.

When a vertex (such as vertex 2 (V-2)) forms part of three differentprimitives then the vertex will be the leading vertex for one primitive,the middle vertex of another primitive, and the trailing vertex for yetanother primitive. For example, vertex 2 (V-2) is the trailing vertex ofprimitive A (P-A), the middle vertex of primitive B (P-B) and theleading vertex of primitive C (P-C). The viewport transformations thatare performed by the viewport transformation module 212 are the viewporttransformations that correspond to the vertex in each of the differentprimitive positions. The viewport that is used when the vertex is ineach of these positions will be dependent on the provoking vertex.

Specifically, if the provoking vertex is 0 (i.e. the leading vertex isthe provoking vertex) then when the current vertex is a trailing vertexthe relevant viewport will be the viewport associated with the vertextwo vertices before the current vertex in the triangle strip; when thecurrent vertex is a middle vertex then the relevant viewport is theviewport associated with the vertex immediately preceding the currentvertex in the triangle strip; and when the current vertex is the leadingvertex then the relevant viewport is the viewport associated with thecurrent vertex. For example, with reference to table 506 of FIG. 5 whenvertex 2 (V-2) is the trailing vertex in primitive A (P-A) the viewportassociated with vertex 0 (V-0) will be used for the transformation; whenvertex 2 (V-2) is the middle vertex in primitive B (P-B) the viewportassociated with vertex 1 will be used for the transformation; and whenvertex 2 (V-2) is the leading vertex in primitive C (P-C) the viewportassociated with vertex 2 (V-2) will be used for the transformation.Accordingly, when the provoking vertex is 0 (i.e. the leading vertex isthe provoking vertex), the relevant viewports for the viewporttransformations will be the viewports associated with the current vertexand the two preceding vertices in the strip.

If the provoking vertex is 1 (i.e. the middle vertex is the provokingvertex) then when the current vertex is a trailing vertex then therelevant viewport will be the viewport associated with the verteximmediately preceding the current vertex in the triangle strip; when thecurrent vertex is a middle vertex then the relevant viewport will be theviewport associated with the current vertex; and when the current vertexis the leading vertex then the relevant viewport will be the viewportassociated with the viewport immediately following the current vertex inthe triangle strip. For example, with reference to table 508 of FIG. 5when vertex 2 (V-2) is the trailing vertex in primitive A (P-A) theviewport associated with vertex 1 (V-1) will be used; when vertex 2(V-2) is the middle vertex in primitive B (P-B) the viewport associatedwith vertex 2 (V-2) will be used; and when vertex 2 (V-2) is the leadingvertex in primitive C (P-C) the viewport associated with vertex 3 (V-3)will be used. Accordingly, when the provoking vertex is 1 (i.e. themiddle vertex is the provoking vertex), the relevant viewports will bethose viewports associated with the current vertex and the verticesimmediately preceding and immediately following the current vertex inthe strip.

If the provoking vertex is 2 (i.e. the trailing vertex is the provokingvertex) then when the current vertex is a trailing vertex then therelevant viewport will be the viewport associated with the currentvertex; when the current vertex is a middle vertex then the relevantviewport will be the viewport associated with the vertex immediatelyfollowing the current vertex in the triangle strip; and when the currentvertex is the leading vertex then the relevant viewport will be theviewport associated with the vertex that is two vertices after thecurrent vertex in the triangle strip. For example, with reference totable 510 of FIG. 5 when vertex 2 (V-2) is the trailing vertex inprimitive A (P-A) the viewport associated with the current vertex willbe used; when vertex 2 (V-2) is the middle vertex in primitive B (P-B)the viewport associated with vertex 3 (V-3) will be used; and whenvertex 2 (V-2) is the leading vertex in primitive C (P-C) the viewportassociated with vertex 4 (V-4) will be used. Accordingly, when theprovoking vertex is 1 (i.e. the middle vertex is the provoking vertex),the relevant viewports will be those viewports associated with thecurrent vertex and the two following vertices in the strip.

Accordingly, in the examples described herein the viewporttransformation module 212 is configured to perform multiple viewporttransformations on each vertex in a task based on the provoking vertex.For example, where the primitives are triangles the viewporttransformation module 212 may be configured to: perform viewporttransformations on the current vertex based on the viewports associatedwith the current vertex and two immediately preceding vertices when theprovoking vertex is the leading vertex; perform viewport transformationson the current vertex based on the viewports associated with the currentvertex, the immediately preceding vertex and the immediately followingvertex when the provoking vertex is the middle vertex; and performviewport transformations on the current vertex based on the viewportsassociated with the current vertex and the two vertices immediatelyfollowing the current vertex when the provoking vertex is the trailingvertex.

Returning to FIG. 4 , in some cases, the transaction processing module402 may be configured to send a single viewport transformationinstruction to the viewport transformation module 212 for each vertex inthe task that causes the viewport transformation module 212 to performmultiple viewport transformations on that vertex. Such a viewporttransformation instruction may comprise, for example, informationindicating the location of the vertex data in the vertex buffer 408(e.g. a base address for the vertex). In some cases, the transactionprocessing module 402 may be configured to determine, from the provokingvertex, the relevant viewports to use for the viewport transformations.In these cases, the viewport transformation instruction may also includeinformation indicating the relevant viewports to be used for thetransformations (e.g. the address of the relevant viewports). Where theviewport transformation instruction does not include informationindicating the viewports to be used in the transformations, the viewporttransformation module 212 itself may be configured to determine, fromthe provoking vertex, the relevant viewports to use for thetransformations.

However, in other cases, the transaction processing module 402 may beconfigured to send a viewport transformation instruction to the viewporttransformation module 212 for each viewport transformation to beperformed. In these cases, the transaction processing module 402 may beconfigured to determine, from the provoking vertex information, theappropriate viewports to be used for the viewport transformations foreach vertex in a received task and send N viewport transformationinstructions to the viewport transformation module 212—one for eachviewport transformation to be performed. The viewport transformationinstructions in these cases may include information indicating thelocation of the vertex in the vertex buffer 408 (e.g. a base address forthe vertex), and information identifying the viewport to be used for thetransformation (e.g. an address of the viewport ID in the vertex buffer408).

The viewport transformation module 212 is configured, for each vertex inthe task, to fetch the untransformed coordinate data (e.g. normalised X,Y, Z and W coordinates in world space) from the vertex buffer 408, fetchinformation from the vertex buffer 408 identifying the viewportassociated with that vertex, and fetch information from the vertexbuffer 408 identifying the viewport associated with at least one othervertex in the strip (based on the provoking vertex information). Theviewport transformation module 212 then performs a viewporttransformation on the untransformed coordinate data for each identifiedviewport to generate transformed coordinate data (e.g. X, Y, Z and W inscreen space) for each identified viewport. The viewport transformationmodule 212 then writes the transformed coordinate data (e.g. X, Y Z andW in screen space) for each identified viewport to the vertex buffer 408for subsequent retrieval by the primitive build module 404 in order toform primitives therefrom.

In some cases, which will be described below with reference to FIGS. 12to 13 , the viewport transformation module 212 may be configured towrite the transformed coordinate data to the vertex buffer 408 so thatthe transformed coordinate data for a primitive can be obtained from thesame location in the vertex buffer 408, regardless of the provokingvertex. An example method for generating transformed coordinate data fora vertex is described below with reference to FIG. 6 . An exampleimplementation of a viewport transformation module 212 is describedbelow with reference to FIG. 8 .

The primitive build module 404 is configured to generate primitives fromthe transformed coordinate data stored in the vertex buffer 408. Theprimitive build module 404 may receive a primitive instruction from thetransaction processing module 402 that provides details of the next taskto be processed by the primitive build module 404. Once the primitivebuild module 404 has received a primitive instruction the primitivebuild module 404 waits for a signal or instruction from the viewporttransformation module 212 indicating that the vertices of the task havebeen transformed; and for index data from an external module. The indexdata comprises information indicating how the vertices relate to eachother to form primitives (e.g. the index data may indicate the leading,middle and trailing vertex of each primitive).

Once the signal or instruction has been received from the viewporttransformation module 212 indicating that the vertices of the task havebeen transformed, and the index data has been received, the primitivebuild module 404 obtains the transformed coordinate data from the vertexbuffer 408 and assembles the transformed coordinate data into primitivesin accordance with the index data. Specifically, the primitive buildmodule 404 identifies, from the index data, the vertices that form eachprimitive, and the relationship between those vertices (e.g. theposition of the vertices in the primitive—for example, which is theleading vertex, which is the middle vertex, and which is the trailingvertex). The primitive build module 404 then retrieves, for eachprimitive, the transformed coordinate data from the vertex buffer 408for each vertex that corresponds to the vertex in the relevant positionof that primitive.

As described above, the viewport transformation module 212 is configuredto perform, for each vertex, a viewport transformation for the vertex ineach of the possible positions in a primitive. For example, where theprimitive is a triangle a viewport transformation is performed for thevertex as the leading vertex of a primitive, a viewport transformationis performed for the vertex as the middle vertex of a primitive, and aviewport transformation is performed for the vertex as the trailingvertex of a primitive. The primitive build module obtains, for eachvertex, in a primitive the transformed coordinate data from the vertexbuffer 408 that corresponds to that vertex in the position of thatprimitive; and, then forms the primitive from that transformedcoordinate data.

For example, if the primitives are triangles and the index dataindicates that there is a primitive formed by vertices C, D and E whereC is the leading vertex, D is the middle vertex and E is the trailingvertex the vertex buffer 408 will comprise three sets of transformedcoordinate data for each of vertices C, D and E—one set that correspondsto the vertex as the leading vertex, one set that corresponds to thevertex as the middle vertex, and one set that corresponds to the vertexas the trailing vertex. In this example, to form the C, D, E primitivethe primitive build module obtains (e.g. fetches): the transformedcoordinate data in the vertex buffer 408 for vertex C that correspondsto vertex C as the leading vertex, the transformed coordinate data inthe vertex buffer 408 for vertex D that corresponds to vertex D as themiddle vertex, and the transformed coordinate data for vertex E thatcorresponds to vertex E as the trailing vertex.

The primitive build module then groups that data together to form aprimitive. In particular, the primitive build module allocates or mapsan index in the index data to each set of transformed coordinate data(i.e. each vertex) of the primitive and links those indices together toform a primitive. Accordingly, where a vertex is viewport transformedthree different times that vertex will be mapped to three differentindices. In some cases, the primitive build module may also beconfigured to convert the transformed coordinate data from one format toanother (e.g. from 32-bit floating point values to 16.8 fixed pointvalues).

Although the primitive build module 404 has been described above asreceiving index data from an external module that indicates how thevertices relate to each other to form primitives, in other examples, theprimitive build module 404 may not receive index data. In theseexamples, since the vertices are in a strip, the primitive build module404 may be configured to (i) identify the primitives from the order ofthe vertices in the strip and (ii) generate (as opposed to map) an indexfor each set of transformed coordinate data (i.e. each vertex) of theprimitives.

Once the primitives have been assembled the primitive build module 404outputs the primitives for further processing.

In some case the PP block 210 may also comprise a cull module 406. Thecull module 406 is configured to receive the primitives generated by theprimitive build module 404 and remove any redundant primitives to reducethe workload on the remaining modules of the geometry processing block202 and rasterization block 204. There are many different methods thatcan be used to identify a primitive is redundant and therefore can beremoved. The cull module 406 may be configured to identify redundantprimitives using any suitable method or combination of methods. Forexample, in some cases, the cull module 406 may be configured to removeany primitives that: are facing away from the user; are completely offthe screen; are fully outside the clipping planes; have bounding boxesthat do not cover any sample points; and/or that do not cover any samplepoints.

Reference is now made to FIG. 6 which illustrates an example method 600for generating transformed coordinate data for a vertex which may beimplemented by the viewport transformation module 212. The method 600begins at block 602 where the viewport transformation module 212 fetchesthe untransformed coordinate data for a vertex (i.e. the current vertex)from a data store, such as a vertex buffer 408. In some cases, block 602may be initiated in response to the viewport transformation module 212receiving a viewport transformation instruction from the transactionprocessing module 402. The viewport transformation module may beconfigured to fetch the untransformed coordinate data from the datastore (e.g. vertex buffer 408) by performing a read request of a certainaddress of the data store. Depending on the size of the untransformedcoordinate data the viewport transformation module 212 may be configuredto fetch the untransformed coordinate data over several clock cycles.For example, in some cases the viewport transformation module 212 may beconfigured to request a first coordinate (e.g. X coordinate) in a firstclock cycle and request subsequent coordinates (e.g. Y, Z and W) insubsequent clock cycles.

At block 604, the viewport transformation module 212 fetches informationfrom the data store (e.g. vertex buffer 408) that indicates the viewportthat the vertex of block 602 (which is referred to herein as the currentvertex) is associated with. As described above, it is the application206 that assigns a viewport to each vertex. In some cases, there will bea fixed number (e.g. 16) of viewports and each of these viewports can beidentified by a viewport ID. In these cases, the geometry data that isreceived from the application typically includes, in addition to theuntransformed coordinate data (e.g. the X, Y, X and W coordinate of thevertex in world space) for each vertex, a vertex ID and the viewporttransformation module 212 is configured to fetch the viewport IDassociated with the current vertex.

At block 606, the viewport transformation module 212 fetches informationfrom the data store (e.g. vertex buffer 408) that indicates the viewportthat is associated with at least one other vertex of the strip. Whereeach vertex is associated with a viewport ID that identifies theviewport that is associated with that vertex, the viewporttransformation module 212 may be configured to fetch the viewport IDassociated with at least one other vertex from the data store (e.g.vertex buffer 408).

The number of other vertices for which viewport information is fetchedis dependent on the number of vertex transformations to be performed oneach vertex by the viewport transformation module. As described above,the viewport transformation module is configured to perform onetransformation for each possible vertex position in a primitive. Sincethe number of possible vertex positions (e.g. leading vertex, middlevertex, trailing vertex) in a primitive is equal to the number ofvertices in the primitive, if there are N vertices per primitive thenthere will be N−1 other vertices for which viewport information isfetched. For example, if the primitive is a triangle (N=3) the viewportinformation for two (N−1) other vertices will be fetched. The verticesfor which viewport information is retrieved are referred to herein asthe viewport vertices.

The particular viewport vertices are determined from the provokingvertex. As described above, the provoking vertex dictates which vertexin a primitive controls the viewport transformation—i.e. the viewportassociated with the provoking vertex is used to perform the viewporttransformation. The current vertex will be the provoking vertex when thecurrent vertex is in one of the primitive positions (e.g. when thevertex is the trailing vertex, the middle vertex or the leading vertex).The other viewport vertices are the provoking vertices when the currentvertex is in the other primitive positions. For example, if theprimitive is a triangle and the provoking vertex is 0 (i.e. theprovoking vertex is the leading vertex) then the current vertex is theprovoking vertex of the primitive when it is the leading vertex.Viewport information is thus also retrieved for the vertices that arethe provoking vertex when the current vertex is the middle vertex of aprimitive and the trailing vertex of a primitive. In this example, whenthe current vertex is the middle vertex of a primitive the provokingvertex will be the vertex immediately preceding the current vertex andwhen the current vertex is the trailing vertex of a primitive theprovoking vertex will be the vertex that is two vertices ahead of thecurrent vertex. Accordingly, in this example the viewport informationfor the vertex immediately preceding the current vertex and the viewportinformation for the vertex that is two vertices ahead of the currentvertex will be fetched. This is summarized in Table 1 for the case whenthe primitive is a triangle.

TABLE 1 Provoking Viewport Vertex Vertex 0 Viewport Vertex 1 ViewportVertex 2 Leading Current Vertex Preceding Vertex Preceding Vertex VertexCurrent Vertex by 2 Current Vertex by 1 Middle Current Vertex PrecedingVertex Following Vertex Vertex Current Vertex by 1 Current Vertex by 1Trailing Current Vertex Following Vertex Following Vertex Vertex CurrentVertex by 1 Current Vertex by 2

An example method for identifying the viewport vertices when theprimitive is a triangle is described below with reference to FIG. 7 .

At block 608 the viewport transformation module 212 performs a viewporttransformation on the untransformed coordinate data (e.g. X, Y, Z and Win world space coordinates) for each identified viewport to generatetransformed coordinate data (e.g. X, Y, Z in screen space coordinate)for each identified viewport.

At block 610, the viewport transformation module 212 writes thetransformed coordinate data for each identified viewport to the datastore (e.g. vertex buffer 408). As described in more detail below withreference to FIGS. 12 to 13 , in some cases the viewport transformationmodule 212 may be configured to write the transformed coordinate datafor the different viewports to the data store (e.g. vertex buffer 408)so that they are stored in a particular order so that the downstreamcomponents, such as the primitive build module, can easily retrieve therelevant transformed coordinate data from the data store (e.g. vertexbuffer 408). For example, in some cases the viewport transformationmodule 212 may be configured to write the transformed coordinate datafor each identified viewport to the data store (e.g. vertex buffer 408)so that the transformed coordinate data is stored in viewport vertexorder.

Although FIG. 6 shows the blocks of method 600 being executedsequentially it will be evident to a person of skill in the art thatthey may be performed in a different order. For example, it will beevident to a person of skill in the art that blocks 602, 604, and 606may be executed in any order and may be executed over several cycles.Furthermore, although FIG. 6 illustrates a method in which all viewporttransformations are performed on the untransformed coordinate data andthen all of the transformed coordinate data sets are written to the datastore (e.g. vertex buffer 408), in other examples the viewporttransformation module 212 may be configured to write the transformedcoordinate data for a particular viewport transformation to the datastore (e.g. vertex buffer 408) when that transformed coordinate data isavailable instead of waiting for all viewport transformations to becomplete.

Reference is now made to FIG. 7 which illustrates an example method 700for selecting the other viewport vertices (the vertices that supply theviewports to be used in the viewport transformations) that may beimplemented by the transaction processing module 402 or the viewporttransformation module 212 when the primitives are triangles. When theprimitives are triangles there are three vertices per primitive and thusthree possible primitive positions for each vertex. As a result, threeviewport transformations are performed—one transformation based on theviewport associated with the current vertex and two transformationsbased on the viewport associated with two other vertices in the strip.The method 700 of FIG. 7 is an example method used to select the twoother vertices based on the provoking vertex. As described above, it maybe the transaction processing module 402 or the viewport transformationmodule 212 that is configured to identify the other viewport vertices.

The method 700 begins at block 702 where the transaction processingmodule 402 or the viewport transformation module 212 determines whetherthe provoking vertex is 0 (i.e. whether the provoking vertex is theleading vertex of a triangle primitive). If it is determined at block702 that the provoking vertex is 0 then the method 700 proceeds to block704 where the viewports associated with the two vertices immediatelypreceding the current vertex in the strip are selected as the otherviewport vertices. This is because, as described above, with referenceto FIG. 5 , if the provoking vertex is 0 (i.e. if the provoking vertexis the leading vertex) when the current vertex is the trailing vertexthe provoking vertex is the vertex that is two vertices ahead of thecurrent vertex, when the current vertex is the middle vertex theprovoking vertex is the vertex immediately preceding the current vertex,and when the current vertex is the leading vertex it will be theprovoking vertex.

If, however it is determined at block 702 that the provoking vertex isnot 0 then the method 700 proceeds to block 706 where the transactionprocessing module 402 or the viewport transformation module 212determines whether the provoking vertex is 1 (i.e. whether the provokingvertex is the middle vertex of a triangle primitive). If it isdetermined at block 706 that the provoking vertex is 1 then the method700 proceeds to block 708 where the viewports associated with the verteximmediately preceding the current vertex in the strip and the verteximmediately following the current vertex in the strip are selected asthe other viewport vertices. This is because, as described above, withreference to FIG. 5 , if the provoking vertex is 1 (i.e. if theprovoking vertex is the middle vertex) when the current vertex is thetrailing vertex the provoking vertex is the vertex that immediatelyprecedes the current vertex in the strip, when the current vertex is themiddle vertex the provoking vertex is the current vertex, and when thecurrent vertex is the leading vertex the provoking vertex is the verteximmediately following the current vertex in the strip.

If, however it is determined at block 706 that the provoking vertex isnot 1 then the method 700 proceeds to block 710 where the transactionprocessing module 402 or the viewport transformation module 212determines whether the provoking vertex is 2 (i.e. whether the provokingvertex is the trailing vertex of a triangle primitive). If it isdetermined at block 710 that the provoking vertex is 2 then the method700 proceeds to block 712 where the viewports associated with the twovertices immediately following the current vertex in the strip areselected as the other viewport vertices. This is because, as describedabove, with reference to FIG. 5 , if the provoking vertex is 2 (i.e. ifthe provoking vertex is the trailing vertex) when the current vertex isthe trailing vertex the provoking vertex is the current vertex, when thecurrent vertex is the middle vertex the provoking vertex is the verteximmediately following the current vertex in the strip, and when thecurrent vertex is the leading vertex the provoking vertex is the secondvertex following the current vertex in the strip.

Although FIGS. 6-7 describe that N viewport transformations areperformed on each vertex in a strip based on the viewports associatedwith that vertex and the viewports associated one or more verticespreceding and/or following that vertex in the strip. The vertices nearthe beginning or end of a strip (which will be referred to herein asedge vertices) may not have the required number of vertices preceding orfollowing that vertex in the strip. For example, the first vertex in astrip will not have any preceding vertices in the strip. Accordingly,for the edge vertices in the strip it may not be possible to perform atransformation based on the viewport associated with a preceding and/orfollowing vertex. In some cases, the viewport transformation module maybe configured to perform less than N viewport transformations for edgevertices. For example, where the provoking vertex is the leading vertexthere are not two vertices preceding this vertex in the strip so onlyone viewport transformation may be performed, the viewporttransformation based on the viewport associated with the vertex.However, in other cases the viewport transformation module may beconfigured to still perform N viewport transformation modules on theedge vertices and to use a dummy or default viewport for anynon-existent preceding or following vertices. Although suchtransformations are performed the corresponding transformed coordinatedata won't be used to form any subsequent vertex thus the actualviewport transformations that are performed are irrelevant. Analternative approach may involve requesting and/or retrievinginformation identify the viewport associated with one or more verticesthat precede and/or follow that strip (for example, where the stripbeing processed forms part of a larger strip) to enable all N viewporttransformations to take place using the correct viewports.

Reference is now made to FIG. 8 which illustrates an exampleimplementation of a viewport transformation module 212. As describedabove, the viewport transformation module is configured to perform Nviewport transformations on vertices in a strip wherein N is the numberof vertices in each primitive. The viewport transformation module 212 ofFIG. 8 comprises a fetch module 802, a processing module 804, and awrite module 806.

The fetch module 802 is configured to receive viewport transformationinstructions (e.g. from the transaction processing module 402) thatidentify a vertex to be transformed and to fetch the untransformedcoordinate data for that vertex from the data store (e.g. vertex buffer408). In some cases, the viewport transformation instructions comprisean address that identifies the start of the vertex data (e.g. a vertexbase address) in the data store (e.g. vertex buffer 408). The vertexdata stored for each vertex data typically comprises the untransformedcoordinate data (e.g. X, Y, X and W in world space coordinates) andother data (such as the VPT ID). The fetch module 802 determines fromthe information identifying the start of the vertex data (e.g. thevertex base address) the address of the untransformed coordinate dataand sends a read request to the data store (e.g. vertex buffer 408) forthe data at that address. Depending on the size of the untransformedcoordinate data, the fetch module 802 may be configured to fetch eachindividual untransformed coordinate separately via individual fetchrequests. For example, the fetch module 802 may be configured to requestthe untransformed X coordinate in a first clock cycle, the untransformedY coordinate in a second clock cycle and so on.

The fetch module 802 is also configured to fetch (or obtain) informationidentifying the viewport associated with the vertex to be transformed(which may be referred to herein as the current vertex) from the datastore (e.g. vertex buffer 408) and information identifying the viewportassociated with N−1 other vertices in the strip from the data store(e.g. vertex buffer 408), wherein N is the number of vertices in aprimitive. As described above, each vertex may be assigned (orassociated with) a viewport which is identified by a viewport (VPT) ID.The VPT ID is stored in the data store as part of the vertex data foreach vertex. In these cases the fetch module 802 may be configured toobtain the VPT ID associated with the vertex to be transformed and theVPT ID of N−1 vertices in the strip which may, for example, comprisesending a read request to the data store (e.g. vertex buffer 408) foreach desired VPT ID.

In some cases, the viewport transformation instruction will includeinformation identifying the VPT IDs to obtain and the fetch module 802simply obtains the identified VPT IDs. For example, the viewporttransformation instruction may include the address/location of the datastore (e.g. vertex buffer 408) where the relevant VPT ID can be found.In other cases, however, the fetch module 802 or other logic (not shown)in the viewport transformation module 212 may be configured to identifythe VPT IDs to be obtained based on the provoking vertex and the numberof vertices in each primitive. For example, where the primitives aretriangles (i.e. 3 vertices per primitive) the fetch module 802, or otherlogic of the viewport transformation module 212, may be configured toselect the additional VPT IDs to obtain using the method 700 describedabove with respect to FIG. 7 .

In some cases, the VPT IDs fetched (or obtained) from the data store(e.g. vertex buffer 408) may be stored in a cache in association with,for example, the vertex they are associated with and/or the address ofthe data store (e.g. vertex buffer 408) from which it was fetched. Inthese cases, when the fetch module 802 wants to fetch (or obtain) theVPT ID associated with a particular vertex, the fetch module 802 may beconfigured to first see if the VPT ID associated with that particularvertex is in the cache (and thus has already been fetched from the datastore (e.g. vertex buffer 408)). Since the VPT IDs associated with mostvertices will be used N times this can significantly reduce the numberof reads performed on the data store (e.g. vertex buffer 408).

In some cases, the untransformed coordinate data and the information(e.g. VPT ID) identifying the viewport associated with the vertex to betransformed and N−1 other vertices is stored in a vertex data buffer 808in the order it is to be processed, such as a FIFO (first in first out)buffer until the processing module 804 is ready to perform the viewporttransformation of that data. Although FIG. 8 shows a single vertex databuffer 808, in other examples there may be multiple data buffers forstoring the untransformed coordinate data. For example, there may be adata buffer for storing the untransformed X, Y and Z coordinates andanother data buffer for storing the untransformed W coordinate.

The processing module 804 comprises a series of ALUs (arithmetic logicunits) configured to perform a viewport transformation on untransformedcoordinate data (e.g. X, Y, Z and W in world space coordinates) togenerate transformed coordinate data (e.g. X, Y, Z and W in screen spacecoordinates) for a particular viewport. The processing module 804receives the untransformed coordinate data (e.g. X, Y, Z and W in worldspace coordinates) from the vertex data buffer 808 and receives anindication of the viewport to transform the coordinate data to.

In some cases, each possible viewport is associated with a set ofcoefficients which drive the ALUs to transform the untransformedcoordinate data to that viewport. In these cases, the viewporttransformation module 212 may comprise a coefficient storage module 810that stores the coefficients for each possible viewport. In some cases,the coefficients along with their associated VPT ID may be received fromthe application 206 as part of state information and then stored in thecoefficient storage module 810. The coefficients for a particularviewport are then selected from the coefficient storage module 810 viathe VPT ID. In other words, the VPT ID acts as an index to thecoefficient storage module 810. In these cases, when the untransformedcoordinate data (e.g. X, Y, Z, W) is provided to the processing module804 for processing the VPT ID associated with the viewporttransformation to be performed is provided to the coefficient storagemodule 810 which causes the coefficient storage module 810 to providethe set of coefficients associated with the appropriate viewport to beprovided to the processing module 804.

The processing module 804 is configured to perform one viewporttransformation at a time and output transformed coordinate data (e.g. X,Y, Z and W in screen space coordinates). Since N transformations will beperformed on the same untransformed coordinate data (e.g. X, Y, Z and W)the processing module 804 is said to perform N passes or iterations ofthat untransformed coordinate data. In some cases, the processing module804 is configured to perform the viewport transformation based on theviewport associated with the current vertex in the first pass oriteration and perform the viewport transformations based on the viewportassociated with the other vertices in the strip in the subsequent passesor iterations. As described below, in some cases the transformedcoordinate data for the different passes or iterations is stored in thedata store (e.g. vertex buffer 408) in a predetermined order to make iteasier for the downstream components, such as the primitive build module404, to subsequently fetch the transformed coordinate data from the datastore (e.g. vertex buffer 408). In these cases, performing the viewporttransformations in this order makes it easier for the viewporttransformation module 212 (or the transaction processing module 402) tocalculate the address of the data store (e.g. the vertex buffer 408) towhich the transformed coordinate data is to be written. It will beevident to a person of skill in the art that this is an example only andthat the viewport transformations may be performed in a different order.For example, in other cases the viewport transformations may beperformed in viewport vertex order (i.e. the order that the verticesassociated with the identified viewports are in the strip).

The write module 806 receives the transformed coordinate data (e.g. X,Y, Z and W in screen space coordinates) and writes the transformedcoordinate data (e.g. X, Y, Z and W in screen space coordinates) to thedata store (e.g. vertex buffer 408). In some cases, the write module 806may be configured to write the transformed coordinate data to the datastore (e.g. vertex buffer 408) such that the transformed coordinate datafor the different viewports is stored in the data store (e.g. vertexbuffer 408) in a particular order so that it is easier for downstreammodules, such as the primitive build module 404, to retrieve theappropriate transformed coordinate data from the data store (e.g. vertexbuffer 408).

For example, as described below with reference to FIGS. 12 to 13 thewrite module 806 may be configured to cause the transformed coordinatedata (e.g. X, Y, Z and W in screen space coordinates) for a vertex to bestored in the data store (e.g. vertex buffer 408) in an order thatcorresponds to the order of the viewport vertices in the strip. Forexample, if the viewports associated with vertices 1, 2 and 3 are usedfor the viewport transformations and vertex 1 precedes vertex 2 in thestrip, and vertex 2 precedes vertex 3 in the strip, then the transformedcoordinate data (e.g. X, Y, Z and W in screen space coordinates) basedon the viewport associated with vertex 1 may be stored in a firstlocation (e.g. base address+0) in the data store (e.g. vertex buffer408), the transformed coordinate data (e.g. X, Y, Z and W in screenspace coordinates) based on the viewport associated with vertex 2 may bestored in the next location (e.g. base address+1) in the data store(e.g. vertex buffer 408), and the transformed coordinate data (e.g. X,Y, Z and W in screen space coordinates) based on viewport associatedwith vertex 3 may be stored in the further next location (e.g. baseaddress+2) in the data store (e.g. vertex buffer 408).

In other words, the transformed coordinate data based on the differentviewports can be understood as being stored in the data store (e.g.vertex buffer 408) at different offsets from a base address wherein theoffset dictates the order of that transformed coordinate data in thedata store. Where the transformed coordinate data is to be stored in thedata store (e.g. vertex buffer 408) in an order corresponding to theorder of the viewport vertices in the strip, the transformed coordinatedata based on the viewport associated with the first viewport vertex inthe strip may be written to a base address plus an offset of zero, thetransformed coordinate data based on the viewport associated with thesecond viewport vertex in the strip may be written to a base addressplus an offset of one, the transformed coordinate data based on theviewport associated with the third viewport vertex in the strip may bewritten to a base address plus an offset of two and so on.

In some examples, the transaction processing module 402 may beconfigured to determine the appropriate offset for each viewporttransformation based on the ordering of the viewport vertices in thestrip and transmit the determined offset(s) to the viewporttransformation module 212 as part of the viewport transformationinstruction(s). In other examples, the viewport transformation module212 may itself be configured to determine the offset for each viewporttransformation based on the ordering of the viewport vertices in thestrip. In yet other examples, the transaction processing module 402 maybe configured to provide information to the viewport transformationmodule 212 that allows the viewport transformation module 212 todetermine the appropriate offset without having to determine the orderof the viewport vertices in the strip.

For example, in some cases the transaction processing module 402 may beconfigured to cause the viewport transformation module 212 to performthe viewport transformations in a predetermined order and provideinformation, as part of the viewport transformation instruction(s),indicating which is the first viewport transformation, which is thesecond viewport transformation and so on. For example, the transactionprocessing module 402 may be configured to cause the viewporttransformation module 212 to perform the viewport transformationcorresponding to the viewport of the current vertex first andsubsequently perform the viewport transformations corresponding to theviewports of the other vertices in order. The transaction processingmodule 402 may then include information in the viewport transformationinstruction(s) associating each viewport transformation with aniteration or pass number. The viewport transformation module 212 canthen use the pass or iteration information in conjunction with theprovoking vertex to identify the offset to be used to store thetransformed coordinate data for each viewport transformation.

For example, if the primitive is a triangle and the provoking vertex isthe leading vertex then the viewport vertices will be the current vertexand the two vertices immediately preceding the current vertex. If duringthe first pass or iteration the viewport transformation module 212 isconfigured to perform the viewport transformation based on the viewportassociated with the current vertex then this viewport transformation isrelated to the third viewport vertex in the strip and thus theassociated transformed coordinate data should be stored in the thirdposition (i.e. offset 2). If during the second and third passes oriterations the viewport transformation module 212 is configured toperform viewport transformations based on the viewport associated withthe vertex that precedes the current vertex by two, and based on theviewport associated with the vertex that precedes the current vertex byone respectively then these viewport transformations are related to thefirst and second viewport vertices in the strip and thus the associatedtransformed coordinate data should be stored in the first and secondpositions (i.e. offsets 0 and 1) respectively. Therefore, if theprovoking vertex is the leading vertex the viewport transformationmodule 212 may be configured to use offset 2 during the first iteration,offset 0 during the second iteration, and offset 1 during the thirditeration.

Similarly, if the primitive is a triangle and the provoking vertex isthe middle vertex then the viewport vertices will be the current vertex,the vertex immediately preceding the current vertex, and the verteximmediately following the current vertex in the strip. If during thefirst pass or iteration the viewport transformation module 212 isconfigured to perform the viewport transformation based on the viewportassociated with the current vertex then this viewport transformation isrelated to the second viewport vertex in the strip and thus theassociated transformed coordinate data should be stored in the secondposition (i.e. offset 1). If during the second and third passes oriterations the viewport transformation module 212 is configured toperform viewport transformations based on the viewport associated withthe vertex that precedes the current vertex by one, and based on theviewport associated with the vertex that follows the current vertex byone then these viewport transformations are related to the first andthird viewport vertices in the strip and thus the associated transformedcoordinate data should be stored in the first and third positions (i.e.offsets 0 and 2) respectively. Therefore, if the provoking vertex is themiddle vertex the viewport transformation module 212 may be configuredto use offset 1 during the first iteration, offset 0 during the seconditeration and offset 2 during the third iteration.

This is summarized in Table 2.

TABLE 2 Provoking Vertex Iteration 1 Iteration 2 Iteration 3 LeadingVertex Offset 2 Offset 0 Offset 1 Middle Vertex Offset 1 Offset 0 Offset2 Trailing Vertex Offset 0 Offset 1 Offset 2

Reference is now made to FIG. 9 which is a block diagram showing anexample structure of the vertex buffer 408. In the example of FIG. 9 thevertex buffer 408 is divided into a plurality of vertex blocks 902wherein each vertex block 902 is configured to store vertex data,including transformed coordinate data and untransformed coordinate data,for a plurality of vertices. Each vertex block 902 is divided into atransformed coordinate data section 904, an untransformed coordinatedata section 906, and an ‘other’ vertex data section 908. Thetransformed coordinate data section 904 is used to store the transformedcoordinate data for the associated vertices, the untransformedcoordinate data section 906 is used to store the untransformedcoordinate data for the associated vertices, and the ‘other’ vertex datasection 908 is configured to store other data related to the verticessuch as the VPT ID associated with each vertex and other statusinformation. Accordingly, the fetch module 802 of the viewporttransformation module 212 is configured to read from the untransformedcoordinate data section 906 and the write module 806 of the viewporttransformation module 212 is configured to write to the transformedcoordinate data section 904.

Reference is now made to FIG. 10 which illustrates an example structureof a vertex block 902 that is known to the application (which does notnecessarily mean that the structure is well-known) which is configuredto store untransformed and transformed coordinate data for a pluralityof vertices which are viewport transformed in parallel. Each section904, 906, 908 of the vertex block 902 comprises a number of rows andcolumns to hold the data associated with four vertices (numbered 0 to 3in this example). In some examples, each column is 32 bits wide, howeverit will be evident to a person of skill in the art that this is anexample only and that another number of bits may be used for thecolumns.

In this example, the untransformed coordinate data is written to thevertex buffer 408 in column order whereas the transformed coordinatedata is written to the vertex buffer 408 in row order. For example, theuntransformed coordinates (X0, Y0, Z0 and W0) related to a first vertex(e.g. vertex 0) are written in column 0 rows 5-8, and the untransformedcoordinates (X1, Y1, Z1 and W1) for a second vertex (e.g. vertex 1) arewritten in column 1 rows 5-8; whereas the transformed coordinates (TX0,TY0, TZ0 and TWO) for the first vertex (e.g. vertex 0) are written incolumns 3 to 0 of row 0 respectively, and the transformed coordinates(TX1, TY1, TZ1 and TW1) for the second vertex (e.g. vertex 1) arewritten in columns 3 to 0 of row 1 respectively. Testing has shown thatin some PP blocks performance can be improved by storing the transformedcoordinates in row order as opposed to column order.

The transformed coordinate data section 904 of FIG. 10 comprises fourrows thus four sets of transformed coordinate data can be stored at onetime. This allows the transformed coordinate data for one viewporttransformation for each of the vertices to be stored. For example, thetransformed coordinate data (TX0, TY0, TZ0, TW0) for the first vertex(vertex 0) may be stored in the first row (row 0); the transformedcoordinate data (TX1, TY1, TZ1, TW1) for the second vertex (vertex 1)may be stored in the second row (row 1); the transformed coordinate data(TX2, TY2, TZ2, TW2) for the third vertex (vertex 2) may be stored inthe third row (row 2); and the transformed coordinate data (TX3, TY3,TZ3, TW3) for the fourth vertex (vertex 3) may be stored in the fourthrow (row 3).

Accordingly, the vertex block 902 structure shown in FIG. 10 isparticularly useful in cases where there is a single viewporttransformation performed on each vertex and these transformations can beperformed in parallel. However, in the embodiments described hereinmultiple (i.e. N) transformations are performed on vertices and thusthere is N times as much transformed coordinate data that needs to bestored. Accordingly, in the embodiments described herein the same vertexblock 902 structure is used, but in a different manner. Specifically,instead of the transformed coordinate data section 904 being used tostore transformed coordinate data for multiple vertices at a time, thetransformed coordinate data section 904 is used to store multiple setsof transformed coordinate data for a single vertex at a time.

Reference is now made to FIG. 11 which illustrates how the vertex block902 structure of FIG. 10 may be used in the embodiments describedherein. Specifically, instead of the rows (e.g. rows 0 to 3) of thetransformed coordinate data section 904 being used to store a single setof transformed coordinate data for multiple different vertices, the rows(e.g. rows 0 to 3) of the transformed coordinate data section 904 areused to store multiple sets of transformed coordinate data for the samevertex. For example, the transformed coordinate data (TX0.A, TY0.A,TZ0.A, TW0.A) for a first vertex (e.g. vertex 0) corresponding to afirst viewport transformation (A) may be stored in the first row (e.g.row 0); the transformed coordinate data (TX0.B, TY0.B, TZ0.B, TW0.B) forthe first vertex (e.g. vertex 0) corresponding to a second viewporttransformation (B) may be stored in the second row (e.g. row 1); and thetransformed coordinate data (TX0.C, TY0.C, TZ0.C, TW0.C) for the firstvertex (e.g. vertex 0) corresponding to a third viewport transformation(C) may be stored in the third row (row 2).

The use of the transformed coordinate data section 904 of the vertexblock 902 in this manner will result in the transformed coordinate datasection 904 being reused or overwritten for each vertex in the vertexblock 902. For example, the transformed coordinate data section 904 iswritten to first with the transformed coordinate data for the firstvertex (e.g. vertex 0), next with the transformed coordinate data forthe second vertex (e.g. vertex 1), next with the transformed coordinatedata for the third vertex (e.g. vertex 2) and finally with thetransformed coordinate data for the fourth vertex (e.g. vertex 3) in thevertex block 902. However, the use of the transformed coordinate datasection 904 of the vertex block 902 in this manner allows the sameamount of storage of the vertex buffer 408 to be used in themulti-viewport transformation cases as the parallel-single viewporttransformation case.

As noted above, in some cases, the write module 806 is configured tostore the transformed coordinate data corresponding to differentviewports in a particular order in the data store (e.g. vertex buffer408) to make it easier for a downstream component, such as the primitivebuild module, to retrieve the appropriate transformed coordinate data.Specifically, in some cases the write module 806 is configured to storethe transformed coordinate data for the identified viewports in order(or reverse order) of the vertices associated with the identifiedviewports in the strip (e.g. triangle strip). For example, if theidentified viewports (e.g. selected in accordance with the method 700 ofFIG. 7 ) are associated with vertices 1, 2 and 3 where vertex 1 precedes2 in the strip and vertex 2 precedes vertex 3 in the strip thetransformed coordinate data based on the viewport associated with vertex1 may be stored at a first offset (e.g. in row 2), the transformedcoordinate data based on the viewport associated with vertex 2 may bestored at a second offset (e.g. in row 1) and the transformed coordinatedata based on the viewport associated with vertex 3 may be stored at athird offset (e.g. in row 0).

Storing the transformed coordinate data in this order ensures that thetransformed coordinate data corresponding to a vertex in a particularprimitive position will always be at the same location (e.g. offset) ofthe data store (e.g. vertex buffer 408) regardless of the provokingvertex. For example, this may ensure that the transformed coordinatedata for a vertex when that vertex is the leading vertex will always beat offset 0, the transformed coordinate data for a vertex when thatvertex is the middle vertex will always be at offset 1, and thetransformed coordinate data for a vertex when that vertex is thetrailing vertex will be at offset 2. This means that, regardless of theprovoking vertex, components downstream from the viewport transformationmodule 212, such as the primitive build module 404, will always be ableto find the transformed coordinate data for a vertex in a particularprimitive position in the same location of the data store (e.g. vertexbuffer 408).

This will be explained with reference to FIG. 12 which shows an exampletriangle strip 1200 comprising five vertices 1202 (V-0 to V-4) and threeprimitives 1204 (P-A to P-C) formed thereby. If the provoking vertex is0 (i.e. the provoking vertex is the leading vertex) then according tomethod 700 of FIG. 7 the viewports associated with the current vertex(i.e. the vertex to be transformed) and the two preceding vertices areto be used for the viewport transformations. For example, if vertex 2(V-2) is the current vertex then the viewport associated with vertices 0(V-0), 1 (V-1) and 2 (V-2) are used for the viewport transformations ofthe untransformed coordinate data for vertex 2 (V-2). If the transformedcoordinate data for vertex 2 (V-2) is stored in order of the viewportvertices then as shown in table 1206 the transformed coordinate data(TX2.0, TY2,0, TZ2.0 and TW2.0) based on the viewport associated withvertex 0 is stored in row 0, the transformed coordinate data (TX2.1,TY2.1, TZ2.1 and TW2.1) based on the viewport associated with vertex 1is stored in row 1, and the transformed coordinate data (TX2.2, TY2.2,TZ2.2 and TW2.2) based on the viewport associated with vertex 2 isstored in row 2. This means that the transformed coordinate datacorresponding to vertex 2 as a trailing vertex (e.g. when part ofprimitive A) is in row 0, the transformed coordinate data correspondingto vertex 2 as a middle vertex (e.g. when part of primitive B) is in row1, and the transformed coordinate data corresponding to vertex 2 as aleading vertex (e.g. when part of primitive C) is in row 2.

If the provoking vertex is 1 (i.e. the provoking vertex is the middlevertex) then according to method 700 of FIG. 7 the viewports associatedwith the current vertex (i.e. the vertex to be transformed), the vertexpreceding the current vertex, and the vertex following the currentvertex are to be used for the viewport transformations. For example, ifvertex 2 (V-2) is the current vertex then the viewport associated withvertices 1 (V-1), 2 (V-2) and 3 (V-3) are used for the viewporttransformations of the untransformed coordinate data for vertex 2 (V-2).If the transformed coordinate data for vertex 2 (V-2) is stored in orderof the viewport vertices then as shown in table 1208 the transformedcoordinate data (TX2.1, TY2.1, TZ2.1 and TW2.1) based on the viewportassociated with vertex 1 is stored in row 0, the transformed coordinatedata (TX2.2, TY2.2, TZ2.2 and TW2.2) based on the viewport associatedwith vertex 2 is stored in row 1, and the transformed coordinate data(TX2.3, TY2.3, TZ2.3 and TW2.3) based on the viewport associated withvertex 3 is stored in row 2. This means that the transformed coordinatedata corresponding to vertex 2 as a trailing vertex (e.g. when part ofprimitive A) is in row 0, the transformed coordinate data correspondingto vertex 2 as a middle vertex (e.g. when part of primitive B) is in row1, and the transformed coordinate data corresponding to vertex 2 as aleading vertex (e.g. when part of primitive C) is in row 2.

If the provoking vertex is 2 (i.e. the provoking vertex is the trailingvertex) then according to method 700 of FIG. 7 the viewports associatedwith the current vertex (i.e. the vertex to be transformed), and the twovertices following the current vertex are to be used for the viewporttransformations. For example, if vertex 2 (V-2) is the current vertexthen the viewports associated with vertices 2 (V-2), 3 (V-3) and 4 (V-4)are used for the viewport transformations of the untransformedcoordinate data for vertex 2 (V-2). If the transformed coordinate datafor vertex 2 (V-2) is stored in order of the viewport vertices then asshown in table 1210 the transformed coordinate data (TX2.2, TY2.2, TZ2.2and TW2.2) based on the viewport associated with vertex 2 is stored inrow 0, the transformed coordinate data (TX2.3, TY2.3, TZ2.3 and TW2.3)based on the viewport associated with vertex 3 is stored in row 1, andthe transformed coordinate data (TX2.4, TY2.4, TZ2.4 and TW2.4) based onthe viewport associated with vertex 4 is stored in row 2. This meansthat the transformed coordinate data corresponding to vertex 2 as atrailing vertex (e.g. when part of primitive A) is in row 0, thetransformed coordinate data corresponding to vertex 2 as a middle vertex(e.g. when part of primitive B) is in row 1, and the transformedcoordinate data corresponding to vertex 2 as a leading vertex (e.g. whenpart of primitive C) is in row 2.

Accordingly, by storing the transformed coordinate data for a vertex inorder of the viewport vertices the transformed coordinate data for avertex corresponding to the vertex in a particular primitive positionwill be found in the same location (e.g. row) of the data store (e.g.vertex buffer 408) regardless (or independent) of the provoking vertex.This allows downstream components, such as, the primitive build module,to always retrieve the transformed coordinate data for the vertex in aparticular primitive position from the same location (e.g. row) of thedata store (e.g. vertex buffer 408) thus simplifying the read logic inthe downstream component(s) Since there are typically more reads oftransformed coordinate data then writes of transformed coordinate dataperformance benefits can be seen by adding the complexity in the writeside as opposed to the read side.

Reference is now made to FIG. 13 which illustrates an example method1300 for writing the transformed coordinate data to the data store (e.g.vertex buffer 308) so that the transformed coordinate data is stored inan order corresponding to an order of the viewport vertices in the strip(i.e. an order corresponding to an order of the vertices in the stripassociated with the plurality of viewports).

The method begins at block 1302 (after the viewport transformationmodule 212 (e.g. processing module 804) has performed a viewporttransformation on untransformed coordinate data for a vertex in a stripfor each of a plurality of viewports to generate transformed coordinatedata for each of the plurality of viewports as described above) wherethe viewport transformation module 212 (e.g. the write module 806)associates each viewport transformation with a different offsetrepresenting the order of the vertex associated with the correspondingviewport in the strip. For example, as described above, if theidentified viewports are associated with vertices 1, 2 and 3 wherevertex 1 precedes 2 in the strip and vertex 2 precedes vertex 3 in thestrip the viewport transformation (and thus the transformed coordinatedata) based on the viewport associated with vertex 1 may be associatedwith a first offset (e.g. offset 0), the viewport transformation (andthus the transformed coordinate data) based on the viewport associatedwith vertex 2 may be associated with a second offset (e.g. offset 1),and the viewport transformation (and thus the transformed coordinatedata) based on the viewport associated with vertex 3 may be associatedwith a third offset (e.g. offset 2). Once the offsets have beenassociated with the viewport transformations then the method 1300proceeds to block 1304.

At block 1304 the transformed coordinate data for each viewporttransformation is stored in a separate location in the data store (e.g.vertex buffer 408) based on the offset associated with that viewporttransformation. In some examples, writing the transformed coordinatedata for each viewport transformation to a separate location in thevertex buffer may comprise at block 1306 determining an address of thevertex buffer for each viewport transformation based on a base addressassociated with the vertex and the offset associated with that viewporttransformation. For example, the address may be the base address plusthe offset. Then at block 1308 the transformed coordinate data for eachviewport transformation is written to the address of the vertex bufferdetermined for that viewport transformation.

As described above, in some cases the offset may correspond to aparticular row in the data store (e.g. vertex buffer 408) such thatwriting the transformed coordinate data to the vertex buffer compriseswriting the transformed coordinate data for each viewport transformationto a different row of the vertex buffer (see, for example, FIGS. 11 and12 and associated description thereof above). Also, as described abovein reference to FIGS. 11 and 12 where the transformed coordinate datacomprises transformed data for each of a plurality of coordinates (e.g.X, Y, Z and W) each coordinate may be written to a different column ofthe data store (e.g. vertex buffer).

In some cases, the viewport transformations may be performed in apredetermined order. For example, the viewport transformationcorresponding to the viewport of the current vertex may be performedfirst and the viewport transformations corresponding to the viewports ofthe other vertices may be subsequently performed in order of thosevertices in the strip. In these cases, each viewport transformation fora vertex is associated with an iteration number/identifier thatindicates the order of the viewport transformation compared to the otherviewport transformations for that vertex. For example, the firstviewport transformation performed may be associated with a firstiteration number, the second viewport transformation performed may beassociated with a second iteration number and so on The iteration numberin conjunction with the provoking vertex may then be used to determinewhich offset is associated with each viewport transformation.

For example, where the primitive is a triangle formed by a leadingvertex, a middle vertex and a trailing vertex and the viewporttransformation are performed in the order described above then theviewport transformations may be associated with the offsets as set outin Table 2 based on the iteration number and provoking vertex. Forexample, the viewport transformation performed in the first iterationmay be associated with a third offset when the provoking vertex is theleading vertex, the viewport transformation performed in the firstiteration may be associated with a second offset when the provokingvertex is the middle vertex, and the viewport transformation performedin the first iteration may be associated with a first offset when theprovoking vertex is the trailing vertex.

As described above, storing the transformed coordinate data in thevertex buffer in an order that corresponds to an order of the verticesin the strip associated with the viewports ensures that the viewporttransformations corresponding to the vertex in each primitive positionare stored in the same location respectively in the data store (e.g.vertex buffer 408) regardless of the provoking vertex. For example, thetransformed coordinate data corresponding to the viewport transformationfor the current vertex as a trailing vertex may always be stored in row0 of the data store (e.g. vertex buffer 408), the transformed coordinatedata corresponding to the viewport transformation for the current vertexas a middle vertex may be stored in row 1 of the data store (e.g. vertexbuffer 408), and the transformed coordinate data corresponding to theviewport transformation for the current vertex as a leading vertex maybe stored in row 2 of the data store (e.g. vertex buffer 408).

Although FIG. 13 illustrates a method in which all viewporttransformations are performed on the untransformed coordinate data andthen all of the transformed coordinate data sets are written to the datastore (e.g. vertex buffer 408), in other examples the viewporttransformation module 212 may be configured to write the transformedcoordinate data for a particular viewport transformation to the datastore (e.g. vertex buffer 408) as soon as that transformed coordinatedata is available instead of waiting for all viewport transformations tobe complete.

FIG. 14 shows a computer system in which the viewport transformationmodules described herein may be implemented. The computer systemcomprises a CPU 1402, a GPU 1404, a memory 1406 and other devices 1414,such as a display 1416, speakers 1418 and a camera 1420. A viewporttransformation module 1410 (corresponding to the viewport transformationmodule 212 described herein) is shown implemented within the GPU 1404.In other examples, the viewport transformation module 1410 may beimplemented within the CPU 1402. The components of the computer systemcan communicate with each other via a communications bus 1422.

The PP blocks 210 and viewport transformation modules 212 of FIGS. 4 and8 are shown as comprising a number of functional blocks. This isschematic only and is not intended to define a strict division betweendifferent logic elements of such entities. Each functional block may beprovided in any suitable manner. It is to be understood thatintermediate values described herein as being formed by a PP block 210or viewport transformation module 212 need not be physically generatedby the PP block 210 or the viewport transformation module 212 at anypoint and may merely represent logical values which convenientlydescribe the processing performed by the PP block 210 or the viewporttransformation module 212 between its input and output.

The viewport transformation module 212 or PP block 210 described hereinmay be embodied in hardware on an integrated circuit. The viewporttransformation modules and PP blocks 210 described herein may beconfigured to perform any of the methods described herein. Generally,any of the functions, methods, techniques or components described abovecan be implemented in software, firmware, hardware (e.g., fixed logiccircuitry), or any combination thereof. The terms “module,”“functionality,” “component”, “element”, “unit”, “block” and “logic” maybe used herein to generally represent software, firmware, hardware, orany combination thereof. In the case of a software implementation, themodule, functionality, component, element, unit, block or logicrepresents program code that performs the specified tasks when executedon a processor. The algorithms and methods described herein could beperformed by one or more processors executing code that causes theprocessor(s) to perform the algorithms/methods. Examples of acomputer-readable storage medium include a random-access memory (RAM),read-only memory (ROM), an optical disc, flash memory, hard disk memory,and other memory devices that may use magnetic, optical, and othertechniques to store instructions or other data and that can be accessedby a machine.

The terms computer program code and computer readable instructions asused herein refer to any kind of executable code for processors,including code expressed in a machine language, an interpreted languageor a scripting language. Executable code includes binary code, machinecode, bytecode, code defining an integrated circuit (such as a hardwaredescription language or netlist), and code expressed in a programminglanguage code such as C, Java or OpenCL. Executable code may be, forexample, any kind of software, firmware, script, module or librarywhich, when suitably executed, processed, interpreted, compiled,executed at a virtual machine or other software environment, cause aprocessor of the computer system at which the executable code issupported to perform the tasks specified by the code.

A processor, computer, or computer system may be any kind of device,machine or dedicated circuit, or collection or portion thereof, withprocessing capability such that it can execute instructions. A processormay be any kind of general purpose or dedicated processor, such as aCPU, GPU, System-on-chip, state machine, media processor, anapplication-specific integrated circuit (ASIC), a programmable logicarray, a field-programmable gate array (FPGA), or the like. A computeror computer system may comprise one or more processors.

It is also intended to encompass software which defines a configurationof hardware as described herein, such as HDL (hardware descriptionlanguage) software, as is used for designing integrated circuits, or forconfiguring programmable chips, to carry out desired functions. That is,there may be provided a computer readable storage medium having encodedthereon computer readable program code in the form of an integratedcircuit definition dataset that when processed in an integrated circuitmanufacturing system configures the system to manufacture a processorconfigured to perform any of the methods described herein, or tomanufacture a processor comprising any apparatus described herein. Anintegrated circuit definition dataset may be, for example, an integratedcircuit description.

There may be provided a method of manufacturing, at an integratedcircuit manufacturing system, a viewport transformation module 212 or PPblock 210 as described herein. There may be provided an integratedcircuit definition dataset that, when processed in an integrated circuitmanufacturing system, causes the method of manufacturing a viewporttransformation module 212 or PP block 210 to be performed.

An integrated circuit definition dataset may be in the form of computercode, for example as a netlist, code for configuring a programmablechip, as a hardware description language defining hardware suitable formanufacture in an integrated circuit at any level, including as registertransfer level (RTL) code, as high-level circuit representations such asVerilog or VHDL, and as low-level circuit representations such as OASIS(RTM) and GDSII. Higher level representations which logically definehardware suitable for manufacture in an integrated circuit (such as RTL)may be processed at a computer system configured for generating amanufacturing definition of an integrated circuit in the context of asoftware environment comprising definitions of circuit elements andrules for combining those elements in order to generate themanufacturing definition of an integrated circuit so defined by therepresentation. As is typically the case with software executing at acomputer system so as to define a machine, one or more intermediate usersteps (e.g. providing commands, variables etc.) may be required in orderfor a computer system configured for generating a manufacturingdefinition of an integrated circuit to execute code defining anintegrated circuit so as to generate the manufacturing definition ofthat integrated circuit.

An example of processing an integrated circuit definition dataset at anintegrated circuit manufacturing system so as to configure the system tomanufacture a viewport transformation module 212 will now be describedwith respect to FIG. 15 .

FIG. 15 shows an example of an integrated circuit (IC) manufacturingsystem 1502 which is configured to manufacture a viewport transformationmodule as described in any of the examples herein. In particular, the ICmanufacturing system 1502 comprises a layout processing system 1504 andan integrated circuit generation system 1506. The IC manufacturingsystem 1502 is configured to receive an IC definition dataset (e.g.defining a viewport transformation module 212 as described in any of theexamples herein), process the IC definition dataset, and generate an ICaccording to the IC definition dataset (e.g. which embodies a viewporttransformation module 212 as described in any of the examples herein).The processing of the IC definition dataset configures the ICmanufacturing system 1502 to manufacture an integrated circuit embodyinga viewport transformation module as described in any of the examplesherein.

The layout processing system 1504 is configured to receive and processthe IC definition dataset to determine a circuit layout. Methods ofdetermining a circuit layout from an IC definition dataset are known inthe art, and for example may involve synthesising RTL code to determinea gate level representation of a circuit to be generated, e.g. in termsof logical components (e.g. NAND, NOR, AND, OR, MUX and FLIP-FLOPcomponents). A circuit layout can be determined from the gate levelrepresentation of the circuit by determining positional information forthe logical components. This may be done automatically or with userinvolvement in order to optimise the circuit layout. When the layoutprocessing system 1504 has determined the circuit layout it may output acircuit layout definition to the IC generation system 1506. A circuitlayout definition may be, for example, a circuit layout description.

The IC generation system 1506 generates an IC according to the circuitlayout definition, as is known in the art. For example, the ICgeneration system 1506 may implement a semiconductor device fabricationprocess to generate the IC, which may involve a multiple-step sequenceof photo lithographic and chemical processing steps during whichelectronic circuits are gradually created on a wafer made ofsemiconducting material. The circuit layout definition may be in theform of a mask which can be used in a lithographic process forgenerating an IC according to the circuit definition. Alternatively, thecircuit layout definition provided to the IC generation system 1506 maybe in the form of computer-readable code which the IC generation system1506 can use to form a suitable mask for use in generating an IC.

The different processes performed by the IC manufacturing system 1502may be implemented all in one location, e.g. by one party.Alternatively, the IC manufacturing system 1502 may be a distributedsystem such that some of the processes may be performed at differentlocations, and may be performed by different parties. For example, someof the stages of: (i) synthesising RTL code representing the ICdefinition dataset to form a gate level representation of a circuit tobe generated, (ii) generating a circuit layout based on the gate levelrepresentation, (iii) forming a mask in accordance with the circuitlayout, and (iv) fabricating an integrated circuit using the mask, maybe performed in different locations and/or by different parties.

In other examples, processing of the integrated circuit definitiondataset at an integrated circuit manufacturing system may configure thesystem to manufacture a viewport transformation module 212 without theIC definition dataset being processed so as to determine a circuitlayout. For instance, an integrated circuit definition dataset maydefine the configuration of a reconfigurable processor, such as an FPGA,and the processing of that dataset may configure an IC manufacturingsystem to generate a reconfigurable processor having that definedconfiguration (e.g. by loading configuration data to the FPGA).

In some embodiments, an integrated circuit manufacturing definitiondataset, when processed in an integrated circuit manufacturing system,may cause an integrated circuit manufacturing system to generate adevice as described herein. For example, the configuration of anintegrated circuit manufacturing system in the manner described abovewith respect to FIG. 15 by an integrated circuit manufacturingdefinition dataset may cause a device as described herein to bemanufactured.

In some examples, an integrated circuit definition dataset could includesoftware which runs on hardware defined at the dataset or in combinationwith hardware defined at the dataset. In the example shown in FIG. 15 ,the IC generation system may further be configured by an integratedcircuit definition dataset to, on manufacturing an integrated circuit,load firmware onto that integrated circuit in accordance with programcode defined at the integrated circuit definition dataset or otherwiseprovide program code with the integrated circuit for use with theintegrated circuit.

The implementation of concepts set forth in this application in devices,apparatus, modules, and/or systems (as well as in methods implementedherein) may give rise to performance improvements when compared withknown implementations. The performance improvements may include one ormore of increased computational performance, reduced latency, increasedthroughput, and/or reduced power consumption. During manufacture of suchdevices, apparatus, modules, and systems (e.g. in integrated circuits)performance improvements can be traded-off against the physicalimplementation, thereby improving the method of manufacture. Forexample, a performance improvement may be traded against layout area,thereby matching the performance of a known implementation but usingless silicon. This may be done, for example, by reusing functionalblocks in a serialised fashion or sharing functional blocks betweenelements of the devices, apparatus, modules and/or systems. Conversely,concepts set forth in this application that give rise to improvements inthe physical implementation of the devices, apparatus, modules, andsystems (such as reduced silicon area) may be traded for improvedperformance. This may be done, for example, by manufacturing multipleinstances of a module within a predefined area budget.

The applicant hereby discloses in isolation each individual featuredescribed herein and any combination of two or more such features, tothe extent that such features or combinations are capable of beingcarried out based on the present specification as a whole in the lightof the common general knowledge of a person skilled in the art,irrespective of whether such features or combinations of features solveany problems disclosed herein. In view of the foregoing description itwill be evident to a person skilled in the art that variousmodifications may be made within the scope of the invention.

What is claimed is:
 1. A transaction processing circuit for use in arendering system, the transaction processing circuit configured to:receive information identifying a particular vertex of a plurality ofvertices in a strip, each of the plurality of vertices in the stripassociated with a viewport; select a plurality of viewports for viewporttransformation of the particular vertex by: selecting a plurality ofrelevant vertices from the plurality of vertices in the strip based on aprovoking vertex, the plurality of relevant vertices comprising theparticular vertex and at least one other vertex from the plurality ofvertices in the strip, and selecting the plurality of viewports tocomprise, for each of the plurality of relevant vertices, the viewportassociated with that relevant vertex; and send one or more viewporttransformation instructions to a viewport transformation module whichcause the viewport transformation module to perform a viewporttransformation on untransformed coordinate data for the particularvertex for each of the plurality of viewports, wherein the one or moreviewport transformation instructions comprises a viewport transformationinstruction for each of the plurality of viewports, each viewporttransformation instruction comprises information identifying theparticular vertex and information identifying one of the plurality ofviewports.
 2. The transaction processing circuit of claim 1, wherein theinformation identifying the particular vertex comprises informationidentifying a location of the untransformed coordinate data for theparticular vertex in a buffer.
 3. The transaction processing circuit ofclaim 1, wherein the information identifying the one of the plurality ofviewports comprises information identifying a location in a buffer ofdata identifying the viewport associated with a relevant vertex of theplurality of relevant vertices.
 4. The transaction processing circuit ofclaim 1, wherein: the rendering system is configured to form one or moreprimitives from the plurality of vertices in the strip, each primitivecomprising N vertices, and the at least one other vertex comprises N−1other vertices.
 5. The transaction processing circuit of claim 1,wherein: the rendering system is configured to form one or more triangleprimitives from the plurality of vertices in the strip, and thetransaction processing circuit is configured to select the at least oneother vertex in the strip from two vertices immediately preceding theparticular vertex in the strip and two vertices immediately followingthe particular vertex in the strip.
 6. The transaction processingcircuit of claim 5, wherein: each triangle primitive comprises a leadingvertex, a middle vertex and a trailing vertex, and the transactionprocessing circuit is configured to select the plurality of relevantvertices by: selecting the two vertices immediately preceding theparticular vertex in the strip as the at least one other vertex in thestrip when the provoking vertex is the leading vertex, selecting avertex immediately preceding the particular vertex in the strip and avertex immediately following the particular vertex in the strip as theat least one other vertex in the strip when the provoking vertex is themiddle vertex, and selecting the two vertices immediately following theparticular vertex in the strip as the at least one other vertex in thestrip when the provoking vertex is the trailing vertex.
 7. Thetransaction processing circuit of claim 1, wherein the transactionprocessing circuit is further configured to associate each of theplurality of viewports with an iteration identifier which identifies tothe viewport transformation module an order in which the viewporttransformation for that viewport is to be performed relative to theviewport transformations for other viewports of the plurality ofviewports.
 8. The transaction processing circuit of claim 7, wherein theone or more viewport transformation instructions comprise informationidentifying the iteration identifier associated with each of theplurality of viewports.
 9. The transaction processing circuit of claim7, wherein: the rendering system is configured to form one or moretriangle primitives from the plurality of vertices in the strip, eachtriangle primitive comprising a leading vertex, a middle vertex and atrailing vertex, and the transaction processing circuit is configured toassociate the iteration identifiers with the plurality of viewports soas to cause the viewport transformation module to perform the viewporttransformation for the viewport associated with the particular vertex ina first iteration, and perform the viewport transformations for theviewports associated with the at least one other vertex in one or moresubsequent iterations.
 10. The transaction processing circuit of claim1, wherein: the rendering system is configured to form one or moretriangle primitives from the plurality of vertices in the strip, eachtriangle primitive comprising a leading vertex, a middle vertex and atrailing vertex, and one viewport of the plurality of viewportscorresponds to a viewport for a triangle primitive in which theparticular vertex is the leading vertex, one viewport of the pluralityof viewports corresponds to a viewport for a triangle primitive in whichthe particular vertex is the middle vertex, and one viewport of theplurality of viewports corresponds to a viewport for a triangleprimitive in which the particular vertex is the trailing vertex.
 11. Thetransaction processing circuit of claim 1, wherein the transactionprocessing circuit is configured to receive a vertex task instructionthat comprises information identifying a set of vertices including theparticular vertex, the information identifying the set of verticescomprising a base address in a vertex buffer and a number of vertices inthe set of vertices.
 12. The transaction processing circuit of claim 1,wherein the transaction processing circuit is embodied in hardware on anintegrated circuit.
 13. A rendering system comprising the transactionprocessing circuit as set forth in claim
 1. 14. A method of selecting,in a rendering system, viewports for viewport transforming a vertex, themethod comprising: receiving information identifying a particular vertexfrom a plurality of vertices in a strip, each of the plurality ofvertices in the strip associated with a viewport; selecting a pluralityof viewports for viewport transformation of the particular vertex by:selecting a plurality of relevant vertices from the plurality ofvertices in the strip based on a provoking vertex, the plurality ofrelevant vertices comprising the particular vertex and at least oneother vertex from the plurality of vertices in the strip, and selectingthe plurality of viewports to comprise, for each of the plurality ofrelevant vertices, the viewport associated with that relevant vertex;and sending one or more viewport transformation instructions to aviewport transformation module which cause the viewport transformationmodule to perform a viewport transformation on untransformed coordinatedata for the particular vertex for each of the plurality of viewports,wherein the one or more viewport transformation instructions comprises aviewport transformation instruction for each of the plurality ofviewports, each viewport transformation instruction comprisinginformation identifying the particular vertex and informationidentifying one of the plurality of viewports.
 15. The method of claim14, wherein the information identifying the particular vertex comprisesinformation identifying a location of the untransformed coordinate datafor the particular vertex in a buffer.
 16. The method of claim 14,wherein the information identifying the one of the plurality ofviewports comprises information identifying a location in a buffer ofdata identifying the viewport associated with a relevant vertex of theplurality of relevant vertices.
 17. The method of claim 14, wherein: therendering system is configured to form one or more triangle primitivesfrom the plurality of vertices in the strip, and the at least one othervertex in the strip is selected from two vertices immediately precedingthe particular vertex in the strip and two vertices immediatelyfollowing the particular vertex in the strip.
 18. The method of claim14, further comprising associating each of the plurality of viewportswith an iteration identifier which identifies to the viewporttransformation module an order in which the viewport transformation forthat viewport is to be performed relative to the viewporttransformations for other viewports of the plurality of viewports. 19.The method of claim 18, wherein each viewport transformation instructioncomprises information identifying the iteration identifier associatedwith the identified viewport.
 20. A non-transitory computer readablestorage medium having stored thereon a computer readable datasetdescription of the transaction processing circuit as set forth in claim1 that, when processed in an integrated circuit manufacturing system,causes the integrated circuit manufacturing system to manufacture anintegrated circuit embodying the transaction processing circuit.